package Z.dailyExercise.March;

public class _剑指Offer56I数组中数字出现的次数 {
    /**
     * 题解：采用位运算
     * 考虑到通过把数据分组，条件
     * 1.相同的数字为一组
     * 2.不同的两个数字分在两个组
     * 所以就将所有异或数值 找到其中不为0 的xi 作为mask
     *
     * @param nums
     * @return
     */
    public int[] singleNumbers(int[] nums) {
        int ret = 0;
        for (int num: nums) {
            ret ^= num;

        }

        //找二进制中不为0的xi
        int div= 1;
        while ((div & ret)== 0){
            div <<= 1;
        }

        int a=0,b=0;
        for (int num:nums){
            if ((div & num) != 0){
                a ^= num;
            }else {
                b ^= num;
            }
        }

        return new int[]{a,b};






    }

}
